﻿
(function ($) {
    function WrongData() {
        app.alert('AlertDlg', 'Ошибка', 'Данные введены неправильно !!!', 'ipdepo-icon-stop32');
    }
    //
    // Каталог автомобилей
    //
    function GetCarCatalogue(vdiv) {
        var pager = $('#' + vdiv + 'Pager');
        var el_vend_id;
        var el_vend_name;
        var auto_vend_name = '';
        var el_model_id;
        var el_model_name;
        var auto_model_name = '';
        var el_color_id;
        var el_color_name;
        var auto_color_name = '';
        var el_engine;
        var gritab;
        var col_order = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
        var col_names = ['ID', 'Марка(ID)', 'Марка', 'Модель(ID)', 'Модель', 'Цвет(ID)', 'Цвет',
                        'Двигатель', 'Цена', 'Комментарий'];
        var col_model = [
		    { name: 'id', index: 'car_id', hidden: true, width: 50, editable: false, fixed: true },
		    { name: 'vend_id', index: 'vend_id', hidden: true, width: 50, editable: true,
            	editoptions: { maxlength: "16", style: "width:95%;min-width:200px;", dataInit: function (el) { el_vend_id = el; } }
		    },
		    { name: 'vend_name', index: 'vend_name', hidden: false, width: 150, editable: true,
		        editoptions: { maxlength: "50", style: "width:95%;min-width:200px;", dataInit: SetVendorHack }
		    },
		    { name: 'model_id', index: 'model_id', hidden: true, width: 50, editable: true,
		        editoptions: { maxlength: "16", style: "width:95%;min-width:200px;", dataInit: function (el) { el_model_id = el; } }
		    },
		    { name: 'model_name', index: 'model_name', hidden: false, width: 150, editable: true,
		        editoptions: { maxlength: "50", style: "width:95%;min-width:200px;", dataInit: SetModelHack }
		    },
		    { name: 'color_id', index: 'color_id', hidden: true, width: 50, editable: true,
		        editoptions: { maxlength: "16", style: "width:95%;min-width:200px;", dataInit: function (el) { el_color_id = el; } }
		    },
		    { name: 'color_name', index: 'color_name', hidden: false, width: 200, editable: true,
		        editoptions: { maxlength: "50", style: "width:95%;min-width:200px;", dataInit: SetColorHack }
		    },
		    { name: 'engine', index: 'engine', hidden: false, width: 100, editable: true,
		        editoptions: { maxlength: "50", style: "width:95%;min-width:200px;", dataInit: function (el) { el_engine = el; } }
		    },
            { name: 'price', index: 'price', hidden: false, width: 100, editable: false
            },
		    { name: 'comment', index: 'comment', hidden: false, width: 200, editable: true,
		        editoptions: { maxlength: "255",  style: "width:95%;min-width:200px;" }
		    }
        ];
        var jqgo = {
            url: 'callbacks.php',
            editurl: 'callbacks.php',
            datatype: 'json',
            postData: { source: 'CarCatalogue', oper: 'page' },
            emptyrecords: true,
            autowidth: false,
            //		    scrollOffset: 22,
            gridview: true,
            hidegrid: false,
            hoverrows: true,
            recordpos: 'right',
            scrollrows: true,
            multiselect: true,
            multiselectWidth: 40,
            multiboxonly: true,
            mtype: 'POST',
            shrinkToFit: true,
            colNames: col_names,
            colModel: col_model,
            page: 1,
            pager: pager,
            pagerpos: 'right',
            rowNum: 10,
            rowList: [10, 50, 200],
            //		    viewrecords: true,
            loadui: 'disable',
            toolbar: [false, 'top'],
            filterbar: false,
            height: 220,
            //		    width: 350,
            sortname: 'vend_name',
            sortorder: 'asc',
            sortable: true,
            caption: '',
            loadError: function () {
                alert("Ошибка загрузки даных");
            },
            loadComplete: function (data) {
                switch( data.userdata.errcode ) {
                    case 0:
                        if ($.browser.msie || $.browser.webkit) {
                            $('#' + vdiv + ' tr.jqgrow td').height(21);
                        }
                        break;
                    case 999:    
                        alert("Ваша сессия закончилась по таймауту.\nПожалуйста перерегистрируйтесь.");
                        document.location = 'index.php';
                        break;
                    default:
                        alert( data.userdata.errmess );
                        break;
                }                

                var id_col = $('#' + vdiv + ' td[aria-describedby="' + vdiv + '_id"]');
                var price_col = $('#' + vdiv + ' td[aria-describedby="' + vdiv + '_price"]');
                if (price_col) {

                    for (var i = 0; i < id_col.length; i++) {
                        $(price_col[i]).click({ vdiv: 'CarPrice', car_id: $(id_col[i]).text(), prnt: gritab }, function (ev) {
                            app.ShowPriceHistory(ev.data.vdiv, ev.data.car_id, ev.data.prnt );
                        });
                    }

                    price_col.css({ 'text-decoration': 'underline', 'cursor': 'pointer' });
                }
            },
            ondblClickRow: function (id) {
                $('#' + vdiv).jqGrid('editGridRow', id,
                {
                    modal: true,
                    jqModal: true,
                    zIndex: app.jqgrid_form_min_z_index,
                    closeOnEscape: true,
                    savekey: [true, 13],
                    editData: { source: 'CarCatalogue' },
                    afterShowForm: function () { $('div#editmod' + vdiv).shadow() },
                    afterSubmit: responseOnSubmit,
                    viewPagerButtons: false,
                    closeAfterEdit: true
                }
                );
            }
        };
        
// Создадим jqGrid
        gritab = $('#' + vdiv).jqGrid(jqgo);

// Индикация ошибок при вводе, ред., удал.
        function testNewData(pd, formid) {
            var result = true, mess = '';
            if( pd.vend_id == '' || pd.model_id == '' || pd.color_id == '' || pd.engine == '') {
                result = false;
                mess = 'Данные введены с ошибками !!!';
            }
            return[result,mess];
        }
        
// Индикация серверных ошибок добавления, ред., удал.
        function responseOnSubmit(response, postdata) {
            var rsp = $.parseJSON(response.responseText);
            var success = true;
            var msg = '';

            if (rsp.errcode) {
                success = false;
                msg = rsp.errmess;
                if (rsp.errcode == '999') {
                    alert("Ваша сессия закончилась по таймауту.\nПожалуйста перерегистрируйтесь.");
                    document.location = 'index.php';
                }
            }
            return [success, msg];
        }

        // Навигатор - обновить
        gritab.jqGrid('navGrid', '#' + vdiv + 'Pager',
// Параметры инструментов
        {
            add: true, del: true, edit: true, search: false,
            afterRefresh: function () { gritab.resetSelection(); }
        },
// Параметры редактирования
        {
            modal: true,
            jqModal: true,
            zIndex: app.jqgrid_form_min_z_index,
//            savekey: [true, 13],
            closeOnEscape: true,
            editData: { source: 'CarCatalogue' },
            afterShowForm: function () { $('div#editmod' + vdiv).shadow() },
            beforeSubmit: testNewData, 
            afterSubmit: responseOnSubmit,
            viewPagerButtons: false,
            closeAfterEdit: true
        },
// Параметры добавления
        {
            modal: true,
            jqModal: true,
            zIndex: app.jqgrid_form_min_z_index,
//            savekey: [true, 13],
            closeOnEscape: true,
            editData: { source: 'CarCatalogue' },
            afterShowForm: function () { $('div#editmod' + vdiv).shadow() },
            beforeSubmit: testNewData, 
            afterSubmit: responseOnSubmit
        },
// Параметры удаления
        {
            modal: true,
            jqModal: true,
            width: 'auto',
            zIndex: app.jqgrid_form_min_z_index,
            closeOnEscape: true,
            delData: { source: 'CarCatalogue' },
            afterShowForm: function () {
                $('div#delmod' + vdiv).shadow();
                $('#DelTbl_' + vdiv + ' tr:eq(2) td').html(
                    '<p style="font-weight:700; text-align:center;">ВНИМАНИЕ !!!</p>' +
                    'Удаление записи(сей)  в этой таблице повлечет за собой<br>' +
                    'удаление соответствующих записей в таблице "Архив цен"' +
                    '<p style="text-align:center;">Выполнить удаление ?</p>'
                );
            },
            afterSubmit: responseOnSubmit
        }
        );
        
/*
        // Пользовательский навигатор - вкл/выкл. тулбар фильтра
        gritab.jqGrid('navButtonAdd', '#' + vdiv + 'Pager', {
            caption: '',
            title: 'Включить тулбар фильтра',
            buttonicon: 'ui-icon-search',
            onClickButton: function () {
                gritab.setGridParam({ filterbar: !gritab.getGridParam('filterbar') });
                gritab[0].toggleToolbar();
            }
        });
*/
        gritab.filterToolbar({ searchOnEnter: false, afterSearch: function () { } });

        function SetVendorHack(el) {
            el_vend_name = el;
            $(el).autocomplete({
                source: function (request, responce) {
                    $.post('callbacks.php', { source: 'VendorDictionary', oper: 'find', term: request.term },
                    function (rsp, textStatus) {
                        if (rsp.errcode) {
                            if (rsp.errcode == '999') { alert(rsp.errmess); location.href = 'index.php'; }
                            else app.alert('AlertDlg', 'Ошибка', rsp.errmess, 'ipdepo-icon-stop32');
                            responce();
                            return;
                        }
                        if (rsp.data) {
                            responce($.map(rsp.data, function (item) {
                                return { label: item.name, value: item.value }
                            }));
                            return;
                        }
                        responce();
                    }, 
                    'json');
                },
                minLength: 2, autoFocus: true,
                focus: function (event, ui) { return false; },
                select: function (event, ui) {
                    $(el_vend_id).val(ui.item.value);
                    auto_vend_name = ui.item.label;
                    $(el_vend_name).val(auto_vend_name);
                    
                    $(el_model_id).val("");
                    auto_model_name = "";
                    $(el_model_name).val("");
                    return false;
                }
            });
            $(el_vend_name).bind( 'change', function () {
// Проверка, что данные получены автозаполнением. 
                if( $(el_vend_id).val() == "" || $(el_vend_name).val() != auto_vend_name ) {
                    $(el_vend_id).val('')
                    auto_vend_name = '';
                }
                $(el_model_id).val("");
                auto_model_name = "";
                $(el_model_name).val("");
            });
        }

        function SetModelHack(el) {
            el_model_name = el;
            $(el).autocomplete({
                source: function (request, responce) {
                    $.post('callbacks.php', { source: 'ModelDictionary', oper: 'find', term: request.term, vend_id: $(el_vend_id).val() },
                    function (rsp, textStatus) {
                        if (rsp.errcode) {
                            if (rsp.errcode == '999') { alert(rsp.errmess); location.href = 'index.php'; }
                            else app.alert('AlertDlg', 'Ошибка', rsp.errmess, 'ipdepo-icon-stop32');
                            responce();
                            return;
                        }
                        if (rsp.data) {
                            responce($.map(rsp.data, function (item) {
                                return { label: item.name, value: item.value }
                            }));
                            return;
                        }
                        responce();
                    }, 
                    'json');
                },
                minLength: 2, autoFocus: true,
                focus: function (event, ui) { return false; },
                select: function (event, ui) {
                    $(el_model_id).val(ui.item.value);
                    auto_model_name = ui.item.label;
                    $(el_model_name).val(auto_model_name);
                    return false;
                }
            });
            $(el_model_name).bind( 'change', function () { 
                if( $(el_model_id).val() == "" || $(el_model_name).val() != auto_model_name ) { 
                    auto_model_name = '';
                    $(el_model_id).val("");
                }
            });            
        }

        function SetColorHack(el) {
            el_color_name = el;
            $(el).autocomplete({
                source: function (request, responce) {
                    $.post('callbacks.php', { source: 'ColorDictionary', oper: 'find', term: request.term },
                    function (rsp, textStatus) {
                        if (rsp.errcode) {
                            if (rsp.errcode == '999') { alert(rsp.errmess); location.href = 'index.php'; }
                            else app.alert('AlertDlg', 'Ошибка', rsp.errmess, 'ipdepo-icon-stop32');
                            responce();
                            return;
                        }
                        if (rsp.data) {
                            responce($.map(rsp.data, function (item) {
                                return { label: item.name, value: item.value }
                            }));
                            return;
                        }
                        responce();
                    }, 
                    'json');
                },
                minLength: 2, autoFocus: true,
                focus: function (event, ui) { return false; },
                select: function (event, ui) {
                    $(el_color_id).val(ui.item.value);
                    auto_color_name = ui.item.label;
                    $(el_color_name).val(auto_color_name);
                    return false;
                }
            });
            $(el_color_name).bind( 'change', function () { 
                if( $(el_color_id).val() == "" || $(el_color_name).val() != auto_color_name ) { 
                    auto_color_name = '';
                    $(el_color_id).val("");
                }
            });                        
        }

        return gritab;
    };  // End of create function definition


    app.ShowCarCatalogue = function (dlgID) {
        var TabObj;
        var aldlg = $('#' + dlgID);
        var TabID = dlgID + 'Tab';

        if ($('#' + TabID).length) return;

        aldlg.html('<table id="' + TabID + '"></table><div id="' + TabID + 'Pager"></div>');

        TabObj = GetCarCatalogue(TabID);

        aldlg.dialog(
        {
            modal: false, title: 'Каталог автомобилей',
            height: 'auto',
            width: 'auto',
            autoOpen: false,
            resizable: false,
            zIndex: app.ui_dialog_min_z_index,
            open: function () { $('div[aria-labelledby="ui-dialog-title-' + dlgID + '"]').shadow() },
            close: function () {
                aldlg.dialog("destroy");
                if (TabObj) TabObj.GridDestroy(TabID);
                $.ui.dialog.maxZ = $.maxZIndex({ group: '.ui-dialog.ui-widget' });
            }
        }
        );

        aldlg.dialog('open');
    }


//
// Цены
//
    function GetPriceHistory(vdiv, vcar_id) {
        var el_vend_id;
        var pager = $('#' + vdiv + 'Pager');
        var gritab;
        var col_order = [0, 1, 2, 3, 4];
        var col_names = ['ID', 'Авто(ID)', 'Дата', 'Цена', 'Активна'];
        var col_model = [
		    { name: 'id', index: 'price_id', hidden: true, width: 50, editable: false, fixed: true },
		    { name: 'car_id', index: 'car_id', hidden: true, width: 50, editable: false, fixed: true },
		    { name: 'setdate', index: 'setdate', hidden: false, width: 150, editable: true },
//		            editoptions: { maxlength: "50",  style: "width:90%;min-width:200px;" } },
		    { name: 'price', index: 'price', hidden: false, width: 150, editable: true }, 
//                  editoptions: { maxlength: "50",  style: "width:90%;min-width:200px;" } },
		    { name: 'active', index: 'active', hidden: false, width: 100,
		        editable: true, edittype: 'checkbox', editoptions: { value: "1:0", defaultValue: "1" },
		        formatter: function (cellvalue, options, rowObject) {
		            return (cellvalue == '1') ? '<span cellval="1" class="ui-icon ui-icon-pin-s"></span>' : '<span cellval="0"></span>'
		        },
		        unformat: function (cellvalue, options, cell) { return $('span', cell).attr('cellval'); }
		    }
        ];
        var jqgo = {
            url: 'callbacks.php',
            editurl: 'callbacks.php',
            datatype: 'json',
            postData: { source: 'CarPrice', oper: 'page', fcar_id: vcar_id },
            emptyrecords: true,
            autowidth: false,
            //		    scrollOffset: 22,
            gridview: true,
            hidegrid: false,
            hoverrows: true,
            recordpos: 'right',
            scrollrows: true,
            multiselect: true,
            multiselectWidth: 40,
            multiboxonly: true,
            mtype: 'POST',
            shrinkToFit: true,
            colNames: col_names,
            colModel: col_model,
            page: 1,
            pager: pager,
            pagerpos: 'right',
            rowNum: 5,
            rowList: [5, 10, 20],
            //		    viewrecords: true,
            loadui: 'disable',
            toolbar: [false, 'top'],
            filterbar: false,
            height: 110,
            //		    width: 350,
            sortname: 'setdate',
            sortorder: 'desc',
            sortable: true,
            caption: '',
            loadError: function () {
                alert("Ошибка загрузки даных");
            },
            loadComplete: function (data) {
                switch( data.userdata.errcode ) {
                    case 0:
                        if ($.browser.msie || $.browser.webkit) {
                            $('#' + vdiv + ' tr.jqgrow td').height(21);
                        }
                        break;
                    case 999:    
                        alert("Ваша сессия закончилась по таймауту.\nПожалуйста перерегистрируйтесь.");
                        document.location = 'index.php';
                        break;
                    default:
                        alert( data.userdata.errmess );
                        break;
                }                
            },
            ondblClickRow: function (id) {
                $('#' + vdiv).jqGrid('editGridRow', id,
                {
                    modal: true,
                    jqModal: true,
                    zIndex: app.jqgrid_form_min_z_index,
                    closeOnEscape: true,
                    editData: { source: 'CarPrice', fcar_id: vcar_id },
                    afterShowForm: function (fm) {
                        var el = fm.find('#setdate');
                        BindCalendar(fm, el);
                        $('div#editmod' + vdiv).shadow();
                    },
                    afterSubmit: responseOnSubmit,
                    viewPagerButtons: false,
                    closeAfterEdit: true
                }
                );
            }
        };

// Создадим jqGrid
        gritab = $('#' + vdiv).jqGrid(jqgo);

// Индикация ошибок добавления, ред., удал.
        function responseOnSubmit(response, postdata) {
            var rsp = $.parseJSON(response.responseText);
            var success = true;
            var msg = '';

            if (rsp.errcode) {
                success = false;
                msg = rsp.errmess;
                if (rsp.errcode == '999') {
                    alert("Ваша сессия закончилась по таймауту.\nПожалуйста перерегистрируйтесь.");
                    document.location = 'index.php';
                }
            }
            return [success, msg];
        }

        // Навигатор - обновить
        gritab.jqGrid('navGrid', '#' + vdiv + 'Pager',
        // Параметры инструментов
        {
            add: true, del: true, edit: true, search: false, refresh: true,
            afterRefresh: function () { gritab.resetSelection(); }
        },
// Параметры редактирования
        {
            modal: true,
            jqModal: true,
            zIndex: app.jqgrid_form_min_z_index,
            savekey: [true, 13],
            resize: false,
            closeOnEscape: true,
            editData: { source: 'CarPrice', fcar_id: vcar_id },
            afterShowForm: function (fm) {
                var el = fm.find('#setdate');
                BindCalendar(fm, el);
                $('div#editmod' + vdiv).shadow();
            },
            afterSubmit: responseOnSubmit,
            viewPagerButtons: false,
            closeAfterEdit: true
        },
// Параметры добавления
        {
            modal: true,
            jqModal: true,
            zIndex: app.jqgrid_form_min_z_index,
            savekey: [true, 13],
            resize: false,
            closeOnEscape: true,
            editData: { source: 'CarPrice', fcar_id: vcar_id },
            afterShowForm: function (fm) {
                var el = fm.find('#setdate');
                el.val($.datepicker.formatDate('dd.mm.yy', new Date()));
                BindCalendar(fm, el);
                $('div#editmod' + vdiv).shadow();
            },
            afterSubmit: responseOnSubmit
        },
// Параметры удаления
        {
            modal: true,
            jqModal: true,
            zIndex: app.jqgrid_form_min_z_index,
            resize: false,
            closeOnEscape: true,
            delData: { source: 'CarPrice', fcar_id: vcar_id },
            afterShowForm: function () { $('div#delmod' + vdiv).shadow() },
            afterSubmit: responseOnSubmit
        }
        );
        
/*
        // Пользовательский навигатор - вкл/выкл. тулбар фильтра
        gritab.jqGrid('navButtonAdd', '#' + vdiv + 'Pager', {
            caption: '',
            title: 'Включить тулбар фильтра',
            buttonicon: 'ui-icon-search',
            onClickButton: function () {
                gritab.setGridParam({ filterbar: !gritab.getGridParam('filterbar') });
                gritab[0].toggleToolbar();
            }
        });
*/
        gritab.filterToolbar({ searchOnEnter: false, afterSearch: function () { } });

        $("#gview_" + vdiv + " #gs_setdate").datepicker({
            dateFormat: "yy-mm-dd",
            showOn: "button",
            buttonImage: "img/calendar2.png",
            buttonImageOnly: true,
            buttonText: "Календарь",
            changeMonth: true,
            changeYear: true,
            onSelect: function (dateText) {
                $(this).focus();
                $(this).keydown();
            }
        });

        $("#gview_" + vdiv + " .ui-datepicker-trigger")
            .css({ 'cursor': 'pointer', 'position': 'relative', 'left': '-18px', 'top': '3px' });

        $("#gview_" + vdiv + " #gs_setdate").attr("title", "Формат ввода: 'ГГГГ-ММ-ДД'");
        $("#gview_" + vdiv + " #gs_active").attr("title", "1-активная цена, 0-все кроме ативной");

        function BindCalendar(fm, el) {
            el.datepicker({
                dateFormat: "dd.mm.yy",
                showOn: "button",
                buttonImage: "img/calendar2.png",
                buttonImageOnly: true,
                buttonText: "Календарь",
                changeMonth: true,
                changeYear: true
                //                onSelect: function (dateText) {
                //                    $(this).focus();
                //                    $(this).keydown();
                //                }
            });

            fm.find(".ui-datepicker-trigger")
                .css({ 'cursor': 'pointer', 'position': 'relative', 'left': '-18px', 'top': '3px' });
            el.attr("title", "Формат ввода: 'дд.мм.гггг'");
                
        }

        return gritab;
    };  // End of create function definition


    app.ShowPriceHistory = function (dlgID, car_id, prnt ) {
        var TabObj;
        var aldlg = $('#' + dlgID);
        var TabID = dlgID + 'Tab';
        var newdlg = $('#' + TabID).length ? false : true;

        if ($('#' + TabID).length) return;

        aldlg.html('<table id="' + TabID + '"></table><div id="' + TabID + 'Pager"></div>');

        TabObj = GetPriceHistory(TabID, car_id);

        aldlg.dialog(
        {
            modal: false, title: 'Архив цен',
            height: 'auto',
            width: 'auto',
            autoOpen: false,
            resizable: false,
            zIndex: app.ui_dialog_min_z_index,
            open: function () { $('div[aria-labelledby="ui-dialog-title-' + dlgID + '"]').shadow() },
            close: function () {
                aldlg.dialog("destroy");
                if (TabObj) TabObj.GridDestroy(TabID);
                $.ui.dialog.maxZ = $.maxZIndex({ group: '.ui-dialog.ui-widget' });
                if( typeof prnt != 'undefined')
                    prnt.trigger("reloadGrid");
            }
        }
        );

        aldlg.dialog('open');
    }

    // ---------------------------------------------------------------------------
})(jQuery);
